package com.c2b.algorithm.leetcode.base;

import java.util.ArrayList;
import java.util.List;

/**
 * <a href='https://leetcode.cn/problems/two-out-of-three/'>至少在两个数组中出现的值(Two Out of Three)</a>
 * <p>给你三个整数数组 nums1、nums2 和 nums3 ，请你构造并返回一个 元素各不相同的 数组，且由 至少 在 两个 数组中出现的所有值组成。数组中的元素可以按 任意 顺序排列。 </p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：nums1 = [1,1,3,2], nums2 = [2,3], nums3 = [3]
 *      输出：[3,2]
 *      解释：至少在两个数组中出现的所有值为：
 *          - 3 ，在全部三个数组中都出现过。
 *          - 2 ，在数组 nums1 和 nums2 中出现过。
 *
 * 示例 2：
 *      输入：nums1 = [3,1], nums2 = [2,3], nums3 = [1,2]
 *      输出：[2,3,1]
 *      解释：至少在两个数组中出现的所有值为：
 *          - 2 ，在数组 nums2 和 nums3 中出现过。
 *          - 3 ，在数组 nums1 和 nums2 中出现过。
 *          - 1 ，在数组 nums1 和 nums3 中出现过。
 *
 * 示例 3：
 *      输入：nums1 = [1,2,2], nums2 = [4,3,3], nums3 = [5]
 *      输出：[]
 *      解释：不存在至少在两个数组中出现的值。
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 * <ul>
 *     <li>1 <= nums1.length, nums2.length, nums3.length <= 100</li>
 *     <li>1 <= nums1[i], nums2[j], nums3[k] <= 100</li>
 * </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/1/18 17:32
 */
public class LC2032TwoOutOfThree_S {
    static class Solution {
        public List<Integer> twoOutOfThree(int[] nums1, int[] nums2, int[] nums3) {
            int[] cnt = new int[101];
            boolean[] booleans = new boolean[101];
            for (int j : nums1) {
                if (!booleans[j]) {
                    booleans[j] = true;
                    ++cnt[j];
                }
            }
             booleans = new boolean[101];
            for (int j : nums2) {
                if (!booleans[j]) {
                    booleans[j] = true;
                    ++cnt[j];
                }
            }
             booleans = new boolean[101];
            for (int j : nums3) {
                if (!booleans[j]) {
                    booleans[j] = true;
                    ++cnt[j];
                }
            }
            List<Integer> resList = new ArrayList<>();
            for (int i = 1; i < cnt.length; i++) {
                if (cnt[i] >= 2) {
                    resList.add(i);
                }
            }
            return resList;
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.twoOutOfThree(new int[]{1, 1, 3, 2}, new int[]{2, 3}, new int[]{3}));
        System.out.println(solution.twoOutOfThree(new int[]{3, 1}, new int[]{2, 3}, new int[]{1, 2}));
        System.out.println(solution.twoOutOfThree(new int[]{1, 2, 2}, new int[]{4, 3, 3}, new int[]{5}));
    }
}
